<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> Promise.race() </title>
</head>
<body>
    
</body>
<script>
    /*
    Promise.race()方法同样是将多个 Promise 实例，包装成一个新的 Promise 实例。
    const p = Promise.race([p1, p2, p3]);
    上面代码中，只要p1、p2、p3之中有一个实例率先改变状态，p的状态就跟着改变。那个率先改变的 Promise 实例的返回值，就传递给p的回调函数。
    Promise.race()方法的参数与Promise.all()方法一样，如果不是 Promise 实例，
    就会先调用下面讲到的Promise.resolve()方法，将参数转为 Promise 实例，再进一步处理。   
    */

    /*下面是一个例子，如果指定时间内没有获得结果，就将 Promise 的状态变为reject，否则变为resolve*/

    const p = Promise.race([
        fetch('/resource-that-may-take-a-while'),
        new Promise(function (resolve, reject) {
            setTimeout(() => reject(new Error('request timeout')), 5000)
        })
        ]);

        p
        .then(console.log)
        .catch(console.error);
/*上面代码中，如果 5 秒之内fetch方法无法返回结果，变量p的状态就会变为rejected，从而触发catch方法指定的回调函数。*/
</script>
</html>